标签:咖啡 见解 class 咖啡店 Coffe 工厂 抽象 public
代码:
CoffeStore(咖啡店类)
public class CoffeStore { private CoffeFactory coffeFactory; public void setCoffeFactory(CoffeFactory coffeFactory) { this.coffeFactory = coffeFactory; } Coffe orderCoffe(){ return coffeFactory.createCoffe(); } }
CoffeFactory(咖啡工厂抽象类)
public abstract class CoffeFactory { abstract Coffe createCoffe(); }
Coffe(咖啡抽象类)
public abstract class Coffe { }
AmericanCoffe(美式咖啡类)
public class AmericanCoffe extends Coffe{ }
AmericanCoffeFacotry(美式咖啡工厂类)
public class AmericanCoffeFactory extends CoffeFactory{ @Override Coffe createCoffe() { return new AmericanCoffe(); } }
客户端
public class Client { public static void main(String[] args) { CoffeStore coffeStore = new CoffeStore(); coffeStore.setCoffeFactory(new AmericanCoffeFactory()); System.out.println(coffeStore.orderCoffe()); } }
首先:看到这个代码一定很疑惑,既然用户端直接new了一个咖啡工厂类,为什么不直接调用咖啡工厂的create方法生成一个coffe对象,但是可以试想一下,咖啡店假如还要对咖啡工厂生成的咖啡再进行一次加工(加冰/加糖)
再者,我们不应该把客户端和咖啡店想成一体的,可以大胆把除Client类的其他java类想象成一个java框架,框架的作用是提供coffe对象,不会有人用mybatis的时候自己用动态代理来生成一个mapper。感觉说的有点迷糊
总的来说:
给咖啡店一个setCoffeFactory方法,减少了咖啡店和咖啡工厂的耦合,咖啡店只需要取调用咖啡工厂的create方法生成咖啡,只需要关心咖啡进一步加工这一业务,而不需要关心咖啡工厂是什么,而咖啡工厂只需要关心咖啡对象的生成。如果需要新增一个类型的咖啡,只需要再添加一个咖啡类和咖啡工厂类,但之前的代码却完全不需要改变(client不算做之前的代码),这样做符合开闭原则
标签:咖啡,见解,class,咖啡店,Coffe,工厂,抽象,public 来源: https://www.cnblogs.com/dronff/p/16519400.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。