将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起来了,客户端就只要了解Boy这个对象就ok了 ,不需要自己去声明接口DreamGir的业务对象l。
//上下文
public class Boy {
private DreamGirl girl;
Boy(DreamGirl girl) {
this.girl = girl;
}
public void want_to_eat() {
girl.prepare_food();
}
public DreamGirl getGirl() {
return girl;
}
public void setGirl(DreamGirl girl) {
this.girl = girl;
}
public static void main(String[]args){
DreamGirl 韩媛媛 = new BeautifulGirl();
Boy ysen = new Boy(韩媛媛);
ysen.want_to_eat();
}
}
//男孩心中抽象的梦中女孩
public abstract class DreamGirl {
//准备食物方法
public abstract void prepare_food();
}
public class LivelyGirl extends DreamGirl{
public void prepare_food() {
System.out.println("老公喜欢我做的酸菜鱼");
}
}
//相貌平平的女孩 呵呵
public class LooksMediocreGirl extends DreamGirl{
public void prepare_food() {
System.out.println("老公喜欢我做的糖醋里脊");
}
}
//一位漂亮的女孩呵呵
public class BeautifulGirl extends DreamGirl {
public void prepare_food() {
System.out.println("老公喜欢我做的土豆炖肉嘿嘿");
}
}
//一位理智的女孩 呵呵
public class SensibleGirl extends DreamGirl{
public void prepare_food() {
System.out.println("老公喜欢我做的鱼香肉丝");
}
}
老公喜欢我做的土豆炖肉嘿嘿
介于部分朋友觉得内容不太露骨,(老鸟略过) 感觉不出策略思想到底是用来解决样的什么问题。
首先策略思想它强调的是用组合来封装原有的动态行为方法。
变化的行为用组合 has a
不变的行为用继承 is a
下面我来改下Boy类
//上下文
public class Boy {
private DreamGirl girl;
Boy(DreamGirl girl) {
this.girl = girl;
}
public void want_to_eat() {
girl.prepare_food();
}//参照上面的Boy类这个行为方法很明显是变化的,所以我们需要抽象这个方法,就是通过美女接口以及具体的业务实现类(不同的girl)
public void prepare_food() {
//System.out.println("老公喜欢我做的鱼香肉丝");
}
public DreamGirl getGirl() {
return girl;
}
public void setGirl(DreamGirl girl) {
this.girl = girl;
}
}
很明显我的 prepare_food() 行为是变化的,我这里用的只能是组合,声明接口DreamGirl是为了可以实现不同的业务类型(不同的女孩),现在的情况是DreamGirl依赖于Boy 但是却实现了业务的变化,我们这里完全可以通过spring 来降低耦合
分享到:
相关推荐
创建型模式关注的是对象的创建方式,旨在提供一种机制,让用户可以从不同的创建策略中选择最适合当前情况的一种。这些模式有助于隐藏对象创建的具体细节,并为对象创建提供了一个统一的接口。 **1.1.1 Abstract ...
1、 FACTORY —追 MM 少不了请吃饭了, 麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西, 虽然口味有所不同, 但不管你带 MM 去麦当劳或肯德基, 只管向服务员说“来四个鸡翅”就行 了。麦当劳和肯德基就是生产鸡翅...
19. 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并使它们可相互替换。 20. 模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 21. 访问者模式...
如梦中的情景,家中的“老公”是一个单例,任何时候提到“老公”都指向同一人。单例模式常用于控制资源的共享,如数据库连接或线程池。 6. **结构型模式**: 结构型模式关注如何组合现有组件来创建更复杂的结构。 ...
如装饰器模式(Decorator)、观察者模式(Observer)、代理模式(Proxy)、桥接模式(Bridge)、责任链模式(Chain of ...策略模式(Strategy)、模板方法模式(Template Method)以及访问者模式(Visitor)...
**例子**:如果有一天你拥有了六个老婆,她们都称呼你为“老公”,那么你就是这个家庭中的唯一老公,即单例。这种方式确保了在整个系统中只有一个实例存在。 #### 二、结构型模式 ##### 6、ADAPTER(适配器模式) ...
以上只是23种设计模式中的一部分,其他还包括代理模式、装饰模式、观察者模式、迭代器模式、命令模式、责任链模式、备忘录模式、状态模式、策略模式、模板方法模式、访问者模式、享元模式、组合模式等。每种模式都有...
比如,请女朋友吃汉堡时,您可以直接告诉她“我要一个汉堡”,至于是要牛肉汉堡还是鸡肉汉堡,则由女朋友根据自己的口味选择。这里,您扮演的是抽象工厂的角色,而具体的工厂(如麦当劳或肯德基)则负责根据客户的...
例如,我有 6 个漂亮的老婆,她们的老公都是我,我就是我们家里的老公 Singleton。 结构型模式 结构型模式是处理类和对象之间的关系的设计模式。它可以使系统更加灵活和可扩展。 6. ADAPTER 模式 ADAPTER 模式是...
如同请女朋友去麦当劳吃汉堡,具体要什么口味的汉堡,可以让女朋友自己选择,工厂方法模式提供了这种灵活性。这种模式的优势在于支持开闭原则,易于扩展,但引入了更多的类。 #### 原型模式(Prototype) 原型模式...
在例子中提到的拥有六个老婆的老公就是单例模式的一个形象比喻。无论哪个老婆呼唤“老公”,其实都是指向同一个实体,即确保了“老公”的唯一性。 #### 二、结构型模式 结构型模式主要关注如何组合类或对象来获得...
这个模式类似于请MM吃汉堡的场景。当你带着MM去麦当劳或者肯德基时,并不需要记得每个人的具体口味,而是可以让她们直接告诉服务员自己的喜好。这种模式下,核心的工厂类定义了一个接口,但将具体的创建过程委托给...
最后是行为型模式,这部分将在后续的讨论中涵盖,包括代理模式、责任链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式分别解决了对象行为的分配、事件传递、命令...
5. **单例模式**:就像家庭中的唯一老公,单例模式确保一个类只有一个实例存在,并且全局访问点总是返回相同的实例。它常用于资源管理或者需要全局共享的场景。 6. **适配器模式**:就像朋友kent帮助你与说粤语的...
其他的设计模式包括代理模式、享元模式、外观模式、代理模式、责任链模式、命令模式、迭代器模式、备忘录模式、状态模式、策略模式、模板方法模式以及访问者模式等,它们各自都有独特的应用场景和价值。掌握这些模式...
标题中的“老公老公我爱你PPT动画下载.rar”表明这是一个包含有与爱情主题相关的PPT演示文稿和可能的配套资源的压缩文件。该文件可能是为了庆祝情人节或是表达浪漫情感而设计的,适合用来制作个人化的礼物或者在特殊...
标题中的“永远不变的爱——给情人或老公的ppt模板.rar”表明这是一个专门设计用于表达爱情情感的PowerPoint模板文件,被压缩成RAR格式以便于下载和存储。RAR是一种流行的压缩格式,它能够将多个文件合并成一个单一...
5. **单例模式**:确保一个类只有一个实例,如梦中的六个老婆共享同一个老公。单例模式常用于控制资源访问,如线程池、数据库连接等,但过度使用可能导致设计过于僵化。 6. **适配器模式**:适配器模式解决了接口不...
拥有多位老婆却都认同一人作为老公的例子虽然虚构,但生动诠释了单例模式的核心理念:确保一个类只有一个实例,并且该实例可以全局访问。在软件开发中,单例模式常用于控制资源的访问,例如数据库连接或线程池等,...