老鸟飞过哈
最近和女友很不和,特此用段模式写下自己的状况
我和女友总是为遇到同样的状况而意见不合
比如最近我总于有空余的时间,我想利用这点时间学习下ps,她非要我和她去苏州玩╮(╯▽╰)╭,其实我是很懒的一个人,不喜欢到处乱窜,她却说偶没情调╮(╯▽╰)╭
言归正传
先来看段比较糟糕的代码
伪代码自己随便写了
public Boy :Person{
public override getResult(){
if(action=="用时间"){
println("学习ps");
}else if (action=="有钱"){
println("给老婆买衣服");
}else if....
}
}
这段代码充斥着if else
下面来改写这段代码 将“有时间” “有钱” 等这些状态 抽象出来,并通过两次分派处理将算法还是交给这些状态
//定义的算法(访问者)
public abstract class Action {
//这里的方法个数必须是固定的,不能扩展,如果扩展了,就违背了开放封闭原则,这样设计的目的主要是扩展的是增加它的子类
public abstract void getResult(Boy boy);
public abstract void getResult(Girl girl);
}
下面是具体实现
//访问者
public class HaveMoney extends Action{
public void getResult(Boy boy) {
System.out.println("给老婆买件衣服");
}
public void getResult(Girl girl) {
System.out.println("给自己买件衣服");
}
}
//访问者
public class HaveSparetime extends Action {
public void getResult(Boy boy) {
System.out.println("听音乐,学习ps,把老婆P的漂亮点,嘿嘿");
}
public void getResult(Girl girl) {
System.out.println("独自去旅游,那个书呆子没救了,哦也");
}
}
//访问者
public class Weekend extends Action{
public void getResult(Boy boy) {
System.out.println("⊙﹏⊙b汗 周末睡觉呗");
}
public void getResult(Girl girl) {
System.out.println("O(∩_∩)O哈哈~ 周末逛超市呗");
}
}
下面的Boy 和 Girl 这两个结构是不能变的
public class Boy extends Person{
//这里有两次派送,首先客户端将状态(访问者)传给Boy 完成第一次派送,
//然后将Boy自由传给状态(访问者)完成第二次派送,
//就是说处理的具体算法是在访问者中完成的,Boy 和 Girl 的结构是定下来不变的。
public void accept(Action action) {
action.getResult(this);
}
}
public class Girl extends Person {
public void accept(Action action) {
action.getResult(this);
}
}
下面是对象结构的上下文,对boy和girl 对不同状态的反应
public class PersonContext {
private List<Person> Persons = new ArrayList<Person>();
//增加
public void attach(Person person){
Persons.add(person);
}
//移除
public void detach(Person person){
Persons.remove(person);
}
//显示
public void display(Action action){
for(Person p:Persons){
p.accept(action);
}
}
//客户端
public static void main(String[]args){
PersonContext personContext = new PersonContext();
personContext.attach(new Boy());
personContext.attach(new Girl());
//有钱时候,两人干嘛
Action haveSparetime = new HaveSparetime();
personContext.display(haveSparetime);
}
}
听音乐,学习ps,把老婆P的漂亮点
独自去旅游,那个书呆子没救了,嘿嘿
分享到:
相关推荐
13、CHAIN OF RESPONSIBLEITY —晚上去上英语课,为了好开溜坐到了最后一排,哇,前面 、 坐了好几个漂亮的 MM 哎, 找张纸条, 写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”, 纸条就一个接一个的传上去了,...
如同请女朋友去麦当劳吃汉堡,具体要什么口味的汉堡,可以让女朋友自己选择,工厂方法模式提供了这种灵活性。这种模式的优势在于支持开闭原则,易于扩展,但引入了更多的类。 #### 原型模式(Prototype) 原型模式...
在例子中,处理与女朋友的沟通问题可能需要经过多个人的判断和决策,职责链模式可以确保每个参与者都有机会处理问题,直到找到最终的解决方案。在软件设计中,职责链模式可以用于处理事件、过滤请求等场景,提供了一...
装饰者模式允许在不改变对象结构的前提下动态地增加功能。比如,给女朋友准备生日礼物时,您可能先拍一张照片,然后配上一段文字,再加上一个精美的相框。在这个过程中,每一步都可以看作是对礼物的一种装饰。 **...
- **比喻**:请女朋友吃汉堡,不同的女孩有不同的口味,这时工厂方法模式就派上了用场,你只需要告诉服务员“我要一个汉堡”,至于是哪种汉堡,由女朋友直接告诉服务员。 - **原理**:定义一个用于创建对象的接口...
装饰者模式允许在不改变现有对象结构的情况下动态地增加功能。文章中的例子是将一张照片加上相框和精美的包装盒。 **优点**: - 动态扩展对象的功能。 - 替代继承。 **缺点**: - 多重装饰容易导致类的数量增多。 ...
例如,当你带女朋友去快餐店,无论是麦当劳还是肯德基,只需要告诉服务员“我要四个鸡翅”,而不需要关心具体哪家店生产的鸡翅。 - **原理**: 在工厂模式中,客户类和工厂类是分离的。消费者只需要知道如何向工厂...
装饰者模式就像为一个核心功能添加额外功能的过程,使得礼物更加个性化和有意义。 以上设计模式的解析不仅涵盖了它们的基本定义和应用场景,还通过生动的比喻帮助理解,展示了设计模式在实际生活中的潜在应用。通过...
17. **访问者模式**:GG作为访问者,访问MM的朋友圈,访问者模式允许在不修改对象结构的情况下增加新的操作。 18. **模版方法模式**:GG追求MM的过程可以有固定的步骤,模版方法模式定义一个操作中的算法骨架,而将...
11.책模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。 12. 命令模式(Command):将一个请求封装为一个对象,从而使您可以用不同的请求对客户进行...
标签"表白女朋友 网页 情人节"表明这个项目具有浪漫和情感传达的目的,因此网页设计需要注重情感表达和用户体验。设计师可能需要运用浪漫色彩搭配,比如粉色、红色调,以及心形等爱情符号。同时,交互设计也需要考虑...
单例模式确保一个类只有一个实例,并提供一个全局访问点。 **应用场景:** 当你希望在整个系统中只存在一个实例时,例如数据库连接、线程池等资源。 **优点:** - 确保系统中只有一个实例。 - 全局唯一性。 **...
例如,你遇到一位来自香港的女孩,你们无法直接交流,这时候可以通过一个懂普通话和粤语的朋友来充当“适配器”,使得双方能够顺利沟通。在编程中,适配器模式的作用是使原本接口不兼容的类可以一起工作。 **7. ...
迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问集合中的元素,而又不暴露集合的内部表示。在“追MM”的过程中,可以通过迭代器模式来管理不同阶段的追求行动,确保每个阶段都按计划进行。 #### 17. ...
网页向女友告白和纪念日专用特效是一种创新的表达情感的方式,通过技术手段在网页上营造出浪漫的氛围,让告白或者庆祝纪念日变得更加特别。这个特效可能包含动画、音乐、互动元素以及个性化的文字内容,旨在为用户...
标题中的“前端网页+h5+js 用于送给女朋友”表明这是一个使用HTML5和JavaScript技术制作的前端网页项目,目的可能是为了庆祝女朋友的生日或者作为特别的礼物。HTML5是超文本标记语言的最新版本,提供了许多增强用户...
6. 适配器模式(Adapter):适配器模式就像朋友在不同语言间起的桥梁作用,将不兼容的接口转换为可协作的接口,使得原本不能一起工作的类能够协同工作。 7. 桥梁模式(Bridge):桥接模式将抽象部分与实现部分解耦...
假设你经常需要请女朋友吃饭,并且她喜欢吃鸡翅,无论是麦当劳的还是肯德基的。这时,你可以将麦当劳和肯德基视为“鸡翅工厂”。当你带她去这些地方时,只需要告诉服务员“来四个鸡翅”,而不需要指定是哪个品牌的...