桥梁设计模式(柄体设计模式)
桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实现化是行为的实现化。这个是模式讲模型和行为进行分离。然后让各自的两个等级结构各自独立的变化。然后行为的等级结构组合到模型的等级结构中。可以任意组合。实现多项功能。
角色如下:
?抽象化角色:实际上是对实体领域对象的抽象,不包含这个实体的行为实体。但是具体子类会保存实现化角色的引用。
修正抽象化角色:这个实际上抽象化角色的子类。但是会和实现化角色组合一起产生新的新的行为。
实现化角色:对领域对象变化的行为的封装。把行为进行抽象化。
具体实现化角色:实现化角色的子类。
实际上桥梁模式对领域对象和行为进行分离的典型应用模式。领域实体对象和行为两个等级各自变化。然后组合他们产生不同行为。
也是开闭原则和聚合/组合使用原则典型应用的模式。
?
如何使用:
以人为例。分别以男人穿皮靴走路。女人穿高靴子走路。还有打赤脚走路。还有的是开车的。
那么男人是否可以穿高跟靴子走路。为了动态组合,是可以的。分别以人作为一个等级结构。以XX方式走路作为行为的一个等级结构。然后动态组合他们产生不同行为
男人穿皮靴走。穿高靴子走路(也可以)
女人穿皮靴走路。穿高跟靴子走路如下:
//抽象实体对象角色:人
public interface Person{
?? //人的行为抽象方法。
???public?void operation();
}
?
//男人改有什么样子行为
public class? ManPerson implements Person{
?//走路行为的接口的引用?
?private Walk walk;
? public? ManPerson(Walk walk){
????? this.walk=walk;?
?}
//行为操作
public void operation(){
? sex();
? walk.manner();
?}
?
//性别 男人
private void sex(){
?? System.out.println("我是男人");
?}
}
?
//女人实体领域对象。引用行为走路接口
public class WomanPerson implements Person{
? //走路
??private Walk walk;
? public WomanPerson(Walk walk){
???? this.walk =walk;
?}
?? //人的行为 委托给行为的类去执行
??? public void operation(){
???????? sex();
??????? walk.manner();
??? }
?
??? private void sex(){
?????? System.out.println("我是女人!")
??? }
}
//行为类 走路
public interface Walk{
? //走路方式的行为
? public void manner();
}
?
//高跟靴走路的行为
public?class HighHeelBootsWalk implements Walk{
? //穿高跟靴走路的方式
? public void manner(){
????? System.out.println("我是穿高跟靴走路的!");
?}
}
?
//皮靴的走路类
public? class LeatherBootsWalk implements Walk{
? //我要穿皮靴的走路方式
?public void manner(){
?? System.out.println("我要穿皮靴进行走路!");
?}
}
?
客户端调用
public class client{
??? public static void main(String[] args){
?????? //高跟靴走路
????? Walk highWalk = new HighHeelBootsWalk ();
?????? Walk leatherWalk = new LeatherBootsWalk ();
?????? //男人高跟靴子组合
?????? Person manPerson = new ManPerson(leatherWalk );
???????Person womenPerson = new WomanPerson(highWalk);
???????manPerson.operation();
????? womenPerson.operation();
?? }
?}
?
//一打印结果
我是男人!
我要穿皮靴进行走路!;
我是女人!
我是穿高跟靴走路的!
还可以男人穿高靴子走路 女人穿皮靴走路多钟组合方式。比较灵活。如果新增增其他的组合行为。只需要添加行为对象子类的行为类就可以了。
符合开闭原则。
应用场景:
1.如果需要实体领域对对象和行为对象更加灵活的组合方式时,避免两个层次建立静态的关系。
2,行为对象的增加不影响客户端的代码修改
3,一个构件多余一个实体领域对象和行为对象,且需要他们动态组合时。
4,尽量使用组合
本模式的核心是实体对象对象和行为对象的分离。切实体对象和行为对象有多个组合时才比较适合使用柄体模式