Abstract Factory抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
1 public interface Sender {
2 public void Send();
3 }
4 两个实现类:
5 public class MailSender implements Sender {
6 @Override
7 public void Send() {
8 System.out.println(“this is mailsender!”);
9 }
10 }
11 public class SmsSender implements Sender {
12 @Override
13 public void Send() {
14 System.out.println(“this is sms sender!”);
15 }
16 }
17 public interface Provider {
18 public Sender produce();
19 }
20 两个工厂类:
21 public class SendMailFactory implements Provider {
22 @Override
23 public Sender produce(){
24 return new MailSender();
25 }
26 }
27 public class SendSmsFactory implements Provider{
28 @Override
29 public Sender produce() {
30 return new SmsSender();
31 }
32 }
33 测试类:public class Test {
34 public static void main(String[] args) {
35 Provider provider = new SendMailFactory();
36 Sender sender = provider.produce();
37 sender.Send();
38 }
39 }
普通工厂:
功能描述:
发及时信息,则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。
- Factory Method工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
1 package factory; 7 public interface Product { 8 //声明类所需继承的共同接口,也可以是抽象类 9 }
产品类A
1 package factory; 7 public class ProductA implements Product { 8 public ProductA() { 9 System.out.println("ProductA"); 10 } 11 }
产品类B
1 package factory; 7 public class ProductB implements Product { 8 public ProductB() { 9 System.out.println("ProductB"); 10 } 11 }
工厂类
1 package factory; 7 public class Factory { 8 //可以在工厂类中添加任何你所需要的逻辑 9 public static Product create(String str) 10 { 11 //生成ProductA 12 if(str.equalsIgnoreCase("ProductA")) 13 { 14 return new ProductA(); 15 } 16 else 17 //生成ProductB 18 if(str.equalsIgnoreCase("ProductB")) 19 { 20 return new ProductB(); 21 } 22 return null; 23 } 24 25 }
客户端
1 package factory; 7 public class Client { 8 public static void main(String[] args) { 9 //调用Factory的静态方法生成所要的类 10 Factory.create("productA"); 11 Factory.create("ProductB"); 12 } 13 }
控制台输出结果: