1. 程式人生 > >設計模式筆記--工廠

設計模式筆記--工廠

導致 compute fun imp pack logs AC class bst

簡單工廠

簡單工廠是一個工廠可以生產各種產品,用戶只需要得到這個工廠就可獲得需要的產品

優點:對用戶友好

缺點:工廠分工不明確導致邏輯復雜

└── simple
    ├── SimpleFactory.java
    └── SimpleFactoryTest.java
package com.xh.pattern.factory.simple;

/**
 * Created by root on 3/15/18.
 */
public class SimpleFactory {

    public void produceComputer(String computerBrands) {
        switch (computerBrands) {
            case "apple":
                System.out.println("MAC COMPUTER");
                break;
            case "thinkpad":
                System.out.println("thinkpad COMPUTER");
                break;
            case "asus":
                System.out.println("asus COMPUTER");
                break;
            default:
                System.out.println("生產不了");
        }
    }
}
package com.xh.pattern.factory.simple;

/**
 * Created by root on 3/15/18.
 */
public class SimpleFactoryTest {
    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        simpleFactory.produceComputer("asus");
    }
}

工廠方法

工廠方法是為了彌補簡單工廠的分工不明改進的

優點:工廠分工明確,邏輯簡單

缺點:用戶需要找到對應的工廠才能獲得產品,對用戶不友好

├── function
│   ├── AppleFactory.java
│   ├── AsusFactory.java
│   ├── Factory.java
│   ├── FuncFactoryTest.java
│   └── ThinkPadFactory.java
package com.xh.pattern.factory.function;

/**
 * Created by root on 3/15/18.
 */
public interface Factory {
    void produceComputer();
}
package com.xh.pattern.factory.function;

/**
 * Created by root on 3/15/18.
 */
public class AppleFactory implements Factory {
    @Override
    public void produceComputer() {
        System.out.println("MAC COMPUTER");
    }
}
package com.xh.pattern.factory.function;

/**
 * Created by root on 3/15/18.
 */
public class AsusFactory implements Factory {
    @Override
    public void produceComputer() {
        System.out.println("asus COMPUTER");
    }
}
package com.xh.pattern.factory.function;

/**
 * Created by root on 3/15/18.
 */
public class ThinkPadFactory implements Factory {
    @Override
    public void produceComputer() {
        System.out.println("thinkpad COMPUTER");
    }
}
package com.xh.pattern.factory.function;

/**
 * Created by root on 3/15/18.
 */
public class FuncFactoryTest {
    public static void main(String[] args) {
        Factory factory=new AppleFactory();
        factory.produceComputer();
    }
}

抽象工廠

抽象工廠是為了彌補工廠方法的對用戶不友好改進的

優點:工廠分工明確,邏輯簡單,對用戶友好

缺點:???

├── abstr
│   ├── AppleFactory.java
│   ├── AsusFactory.java
│   ├── DefaultFactory.java
│   ├── Factory.java
│   ├── FuncFactoryTest.java
│   └── ThinkPadFactory.java
package com.xh.pattern.factory.abstr;

/**
 * Created by root on 3/15/18.
 */
public abstract class Factory {
    abstract void produceComputer();

    public void produceComputer(String computerBrands) {
        switch (computerBrands) {
            case "apple":
                new AppleFactory().produceComputer();
                break;
            case "thinkpad":
                new ThinkPadFactory().produceComputer();
                break;
            case "asus":
                new AsusFactory().produceComputer();
                break;
            default:
                System.out.println("生產不了");
        }
    }
}
package com.xh.pattern.factory.abstr;

/**
 * Created by root on 3/15/18.
 */
public class AppleFactory extends Factory {
    @Override
    public void produceComputer() {
        System.out.println("MAC COMPUTER");
    }
}

...

package com.xh.pattern.factory.abstr;

/**
 * Created by root on 3/15/18.
 */
public class DefaultFactory extends Factory {
    @Override
    void produceComputer() {
        new AppleFactory().produceComputer();
    }
}
package com.xh.pattern.factory.abstr;

/**
 * Created by root on 3/15/18.
 */
public class FuncFactoryTest {
    public static void main(String[] args) {
        DefaultFactory factory = new DefaultFactory();
        factory.produceComputer();
        factory.produceComputer("asus");
    }
}

設計模式筆記--工廠