設計模式筆記--工廠
阿新 • • 發佈:2018-03-15
導致 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");
}
}
設計模式筆記--工廠