JAVA_工厂和状态设计模式

需要记下
简单工厂模式 生产一个系列产品(英语书,数学书)或多个无关系列产品(水果与书)
//工厂模式
public interface Book {
    public void getType();
}
//数学书
class MathBook implements Book{
    public MathBook(String id){}
    public void getType() {
        System.out.println("Math");        
    }    
}
//英语书
class EngBook implements Book{
    public void getType() {
        System.out.println("Eng");        
    }    
}
public class BookFactory {
    public static Book getBook(int type){
        if(type==1){return new MathBook("12");}
        else {return new EngBook();}
    }
    public static void main(String []args){
        //用方法取代new+构造,当构造发生变化时,只需修改工厂
        Book b=BookFactory.getBook(1);
        b.getType();
    }
}

抽象工厂模式  生产多个相关系列产品
public interface Book {
    public void getType();
}
class MathBook implements Book{
    public void getType() {
        System.out.println("Math");        
    }    
}
class EngBook implements Book{
    public void getType() {
        System.out.println("Eng");        
    }    
}
*******************************
public interface Provider {
    public void test();
}

class MathProvider implements Provider{
    public void test(){
        System.out.println("Math Provider");
    }
}
class EngProvider implements Provider{
    public void test(){
        System.out.println("Eng Provider");
    }
}
*******************************
public interface AbstractFactory {
    public Book getBook();
    public Provider getProvider();
}

class MathFactory implements AbstractFactory{
    public Book getBook(){
        return new MathBook();
    }
    public Provider getProvider(){
        return new MathProvider();
    }
}

class EngFactory implements AbstractFactory{
    public Book getBook(){
        return new EngBook();
    }
    public Provider getProvider(){
        return new EngProvider();
    }
}
*************************************
public class TestFactory {

    public static void main(String[] args) {
        AbstractFactory af=new MathFactory();
        Book b=af.getBook();
        Provider p=af.getProvider();
        b.getType();
        p.test();
    }
}
////////////////////////////////////////////
public interface Color {
    void process();
}
class Red implements Color{
    public void process(){
        
    }
}
class Yellow implements Color{
    public void process(){
        
    }
}
class Green implements Color{
    public void process(){
        
    }
}
*******************
//不采用状态模式
public class GoNoState {
    private Color c;
    public void go(){
        //if(c==red){}
        //else if(c==yellow){}
        //else {}
    }
}
********************
//对象按照状态采取不同的行为,可以采取状态模式
public class Go {
    private Color c;
    public Go(Color c){this.c=c;}
    public void go(){
        c.process();
    }
}

 

你可能感兴趣的:(java,设计模式,C++,c,C#)