工廠模式(FactoryMethod)

通常實現git

  • 建立實體類
public class WithOutEntityA {
        public WithOutEntityA(){
            System.out.println("create WithOutEntityA ...");
        }
    }
    
    public class WithOutEntityB {
        public WithOutEntityB(){
            System.out.println("create WithOutEntityB ...");
        }
    }
  • 調用方法
public static void main(String[] args) {
        new WithOutEntityA();
        new WithOutEntityB();
    }
  • 輸出
create WithOutEntityA ...
    create WithOutEntityB ...
  • 問題
    new操做符是建立對象最經常使用的方法,可是在一些狀況下,new方法會產生一些問題,或者並不能知足需求,也就是說,對象的建立是一個過程,而不是一個操做。

簡單/靜態工廠方法github

  • 建立接口或抽象類
public interface IEntity {
    }
  • 具體實現類
public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }
  • 建立工廠
public class SimpleFactory {
        public IEntity create(String type){
            IEntity entity = null;
            if(type.equals("A")){
                entity = new EntityA();
            }else if(type.equals("B")){
                entity = new EntityB();
            }
            return entity;
        }
    }
  • 調用
public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        simpleFactory.create("A");
        simpleFactory.create("B");
    }
  • 輸出
create EntityA ...
    create EntityB ...
  • 缺點
    若是要加入新的類,不只要修改調用代碼,還要修改工廠類代碼,違反了開閉原則。

工廠方法模式ide

  • 組成
    1.一個抽象工廠類
    2.多個具體工廠類
    3.一個抽象產品類或產品接口
    4.多個具體產品類,每一個具體產品類,對應一個具體工廠類
  • 具體實現
    定義產品接口
public interface IEntity {
    }
定義具體產品類
public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }
定義抽象工廠
public abstract class Factory {
        public abstract IEntity create();
    }
定義具體工廠
public class FactoryA extends Factory{
        @Override
        public IEntity create() {
            return new EntityA();
        }
    }
    
    public class FactoryB extends Factory{
        @Override
        public IEntity create() {
            return new EntityB();
        }
    }
調用方法
public static void main(String[] args) {
        Factory factory = new FactoryA();
        factory.create();
        factory = new FactoryB();
        factory.create();
    }
輸出
create EntityA ...
    create EntityB ...
  • 優勢
    可以輕鬆構建對象實例,而沒必要關心對象實例建立的發雜過程,對對象的建立進行了包裝,將對象的具體建立過程隔離起來,提升靈活度。

源碼code

https://github.com/Seasons20/DisignPattern.git

END對象

相關文章
相關標籤/搜索