1.工厂设计模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一
种创建对象的最佳方式。避免了子类与父类接口的耦合关系,当接口有多个子类时,可以消除更换子类对主方法的影响。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
目的:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
看例子:
interface Fruit{
void eat();
}
class Apple implements Fruit{
@Override
public void eat() {
System.out.println("eat Apple!");
}
}
class Orange implements Fruit{
@Override
public void eat() {
System.out.println("eat orange!");
}
}
/** 工厂类,作为中间类来解除父类接口与其子类的耦合性 */
class Factory{
public static Fruit getInstance(String className) {
if("Apple".equals(className)) {
return new Apple();
}
if("Orange".equals(className)) {
return new Orange();
}
return null;
}
}
public class Bo {
public static void main(String[] args) {
// 接口通过工厂类取得其实例化对象,避免了new关键字,解除了耦合
Fruit f1 = Factory.getInstance("Apple");
f1.eat();
Fruit f2 = Factory.getInstance("Orange");
f2.eat();
}
}
结果是:
eat Apple!
eat orange!
2.接口的代理设计模式
代理模式:两个子类共同完成一个接口的功能,其中一个子类负责真实的接口功能实现,另一个子类负责辅助真实功能
的完成。
目的:为其他对象提供一种代理以控制对这个对象的访问。
看例子:
interface Subject{
void eat();
}
class RealSubject implements Subject{
@Override
public void eat() {
System.out.println("eat food!");
}
}
/** 对象时加上一个对此对象的访问层 */
class ProxySubject implements Subject{
// 真实的操作业务
private Subject sub;
public ProxySubject(Subject sub) {
this.sub = sub;
}
// 真实业务前期辅助
public void preparation() {
System.out.println("make food!");
}
// 真实业务后期辅助
public void postProcessing() {
System.out.println("wash up!");
}
// 真实业务实现
public void eat() {
this.preparation();
this.sub.eat();
this.postProcessing();
}
}
class Factory{
public static Subject getInstance() {
return new ProxySubject(new RealSubject());
}
}
public class ProxyModeTest {
public static void main(String[] args) {
Subject sub = Factory.getInstance();
sub.eat();
}
}
结果是:
make food!
eat food!
wash up!
实质:所有的真实业务都有一个辅助的工具类共同完成。