其实大家都是朋友,也不能人人都像小明那么势利吧。小刚就做的比较好,一打眼就知道谁是穷人谁又是富人了。不过没关系穷人有穷人的玩法富人有富人的玩法嘛~这段逻辑用代码怎么实现?
首先是一个抽象的朋友(朋友在这里充当了实现者角色)
public abstract class Friend {
//朋友可以一起吃吃饭
protected abstract void eat();
//朋友也可以一起喝喝酒
protected abstract void drink();
public void play(){
eat();
drink();
}
}
下来朋友里有富有的有贫穷的玩法不太一样
public class RichMan extends Friend {
String name;
public RichMan(String name) {
this.name = name;
}
protected void eat() {
System.out.println("可以吃得起法餐");
}
protected void drink() {
System.out.println("可以喝得起82年的拉菲");
}
//富人还可以为所欲为
public void doAnything() {
System.out.println("还可以一起去大保健");
}
public void play() {
System.out.println(name + "很有钱");
super.play();
doAnything();
}
}
穷人
public class PoorMan extends Friend {
private String name ;
public PoorMan(String name) {
this.name = name;
}
protected void eat() {
System.out.println("只能吃得起大排档");
}
protected void drink() {
System.out.println("只能和得起茅台镇");
}
public void play() {
System.out.println(name+"是穷人");
super.play();
}
}
抽象者角色
public abstract class Abstraction {
private Friend friend;
public Abstraction(Friend friend) {
this.friend = friend;
}
public void doSomething(){
System.out.println("没关系不管是谁出去玩我都请客");
}
public void play(){
friend.play();
}
}
具体的抽象者角色重写了父类的部分逻辑,这里仅以小刚所属为例
public class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Friend friend) {
super(friend);
}
//修正抽象类的逻辑
public void play() {
super.play();
super.doSomething();
}
}
场景类
public class Client {
public static void main(String[] args) {
Friend qiang = new PoorMan("小强");
Abstraction gang = new RefinedAbstraction(qiang);
gang.play();
System.out.println("————————————————————————");
Friend hong = new RichMan("小红");
gang = new RefinedAbstraction(hong);
gang.play();
}
}
运行结果:
小强是穷人
只能吃得起大排档
只能和得起茅台镇
没关系不管是谁出去玩我都请客
————————————————————————
小红很有钱
可以吃得起法餐
可以喝得起82年的拉菲
还可以一起去大保健
没关系不管是谁出去玩我都请客