工廠方法模式

1、簡單工廠模式

//工廠類
public class Factory {
      public Product createProduct(String type){
            if( type == "A"){
                 return new ProductA();
           } else if( type == "B"){
                 return new ProductB();
           }
            return null;
     }
}

////////////////////////////////////////////////////////////////////////
public interface  Product {
      public void func();
}

//產品類A
public class ProductA implements Product{
      public void func(){
           System. out.println( "ProductA");
     }
}

//產品類B
public class ProductB implements Product{
      public ProductB(){
     }
     
      public void func(){
           System. out.println( "ProductB");
     }
}

客戶端
////////////////////////////////////////////////////////////
Factory f new Factory();
Product pa = f.createProduct("A");
Pa.func();

Product pb = f.createProduct("B");
Pa.func();



2、工廠方法模式

//工廠類接口
public interface   Factory {
     public Product createProduct ();
}

//工廠類A
public class FactoryA implements Factory{
     public Product createProduct(){
            return new ProductA();
     }
}

//工廠類B
public class FactoryB implements Factory{
     public Product createProduct(){
            return new ProductB();
     }
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//產品基類
public class Product {
     public void func(){
            System. out.println( "product");
     }
}

//產品類A
public class ProductA extends Product{
     public void func(){
           System. out.println( "ProductA");
     }
}

//產品類B
public class ProductB extends Product{
     public void func(){
           System. out.println( "ProductB");
     }
}

/////////////////////////////////////////////////////////////////
//客戶端
public class main {
     
     public static void main(String[] args){
           Factory Fa = new FactoryA();
           Product Pa = Fa.createProduct();
           Pa.func();
           
           Factory Fb = new FactoryB();
           Product Pb = Fb.createProduct();
           Pb.func();
     }
}


3、抽象工廠方法模式

產品A
////////////////////////////////////////////////////////////

//鼠標接口
public interface IMouse {
      public void func();
}

//mac鼠標
public class MacMouse implements IMouse{
      public void func(){
           System. out.println( "MacMouse");
     }
}

//lenovo鼠標
public class LenovoMouse implements IMouse{
      public void func(){
           System. out.println( "lenovoMouse");
     }
}


產品B
/////////////////////////////////////////////////////////////////

//鍵盤接口
public interface IKeyboard {
      public void func();
}

//mac鍵盤
public class MacKeyboard implements IKeyboard{
      public void func(){
           System. out.println( "MacKeyboard");
     }
}

//lenovo鍵盤
public class LenovoKeyboard implements IKeyboard{   
      public void func(){
           System. out.println( "LenovoKeyboard");
     }
}


工廠類
////////////////////////////////////////////////////////

//工廠接口
public interface IFactory {
      public IKeyboard CreateKeyboard ();
      public IMouse CreateMouse();
}

//Mac工廠
public class MacFactory implements IFactory{
      public IKeyboard CreateKeyboard(){
            return new MacKeyboard();
     }
     
      public IMouse CreateMouse(){
            return new MacMouse();
     }
}

public class LenovoFactory implements IFactory{    
      public IKeyboard CreateKeyboard(){
            return new LenovoKeyboard();
     }
     
      public IMouse CreateMouse (){
            return new LenovoMouse();
     }
}

客戶端
////////////////////////////////////////////////////////////

public class main {
      public static void main(String[] args ){

           IFactory factory new MacFactory();
           IMouse mouse = factory .CreateMouse();
            mouse.func();
           IKeyboard keyboard = factory .CreateKeyboard();
            keyboard.func();
           
            factory new LenovoFactory();
            mouse = factory .CreateMouse();
            mouse.func();
            keyboard = factory .CreateKeyboard();
            keyboard.func();  
     }
}

輸出
/////////////////////////////////////////////////////////////
MacMouse
MacKeyboard
lenovoMouse
LenovoKeyboard
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章