1、工厂模式
常用的工厂模式是静态工厂,利用static方法,作为一种类似于常见的工具类Utils等辅助效果。
注:为了让大家更直观,笔者采用类部类的方式示例
// 示例接口
public interface FactoryExample {
class A implements FactoryExample {
public A() {
System.out.println("代码块a的构造函数执行了...");
}
}
class B implements FactoryExample {
public B() {
System.out.println("代码块b报道...");
}
}
class C implements FactoryExample {
public C() {
System.out.println("代码块c前来助阵...");
}
}
// 静态工厂
class StaticFactory{
public FactoryExample getA(){
return new A();
}
public FactoryExample getB(){
return new B();
}
public FactoryExample getC(){
return new C();
}
}
// 测试
class Test {
public static void main(String[] args) {
StaticFactory staticFactory = new StaticFactory();
staticFactory.getA();
staticFactory.getB();
staticFactory.getC();
}
}
}
打印结果如下:
2、抽象工厂模式
一个工厂接口定义了方法,其子类实现此工厂接口(实现了此接口的类就是工厂),重写了该工厂接口的方法
此时,接口编程的优点就出现了,我们可以新增类(只需要实现工厂接口),只需要同时新增一个工厂类,客户端就可以轻松调用新工厂的代码。
// 示例接口
public interface FactoryExample {
// 抽象工厂接口
interface AbstractFactory{
FactoryExample getFactoryExample();
}
class A implements AbstractFactory,FactoryExample{
public A() {
System.out.println("代码块a的构造函数执行了...");
}
@Override
public FactoryExample getFactoryExample() {
return new A();
}
}
class B implements AbstractFactory,FactoryExample{
public B() {
System.out.println("代码块b报道...");
}
@Override
public FactoryExample getFactoryExample() {
return new B();
}
}
class C implements AbstractFactory,FactoryExample{
public C() {
System.out.println("代码块c前来助阵...");
}
@Override
public FactoryExample getFactoryExample() {
return new C();
}
}
// 测试
class Test {
public static FactoryExample getExample(FactoryExample factoryExample){
return factoryExample;
}
public static void main(String[] args) {
FactoryExample example = Test.getExample(new A());
FactoryExample example1 = Test.getExample(new B());
FactoryExample example2 = Test.getExample(new C());
}
}
}
打印结果与上面结果一致
{\__/} {\__/}
( ·-·) (·-· )
/ >------------------------------------------------< \
| ☆ |
| ☆ |
| ★ |
| ☆ |
| ☆ |
| |
-------------------------------------
如有兴趣可以关注我的公众号 :