面向对象之:多聚合,少继承;低耦合,高内聚(以Adapter设计模式为例)
现实问题:在日常程序开发中,需要对现有类扩展新的功能,我们怎么做?
这个时候有人会说,我直接在相关类中加方法不就好了?是的,没问题。
但是,如果现在环境发生变化了呢?如果这个时候有一堆类都需要添加同一个方法呢?我们一个一个的去加?未免修改变动太大,一不小心还会出错,费力且不讨好。
那有没有优雅一点的解决方案?
有的人可能会说了,那不是同一个方法吗,我可以使用继承通过在父类上进行扩展方法,然后再子类重写实现方法,进行实例化调用不就行了?这个时候违反了一些程序的设计原则(开闭原则(非开闭原则:父类被修改)、单一原则(非单一性:父类的功能职责变多)、无侵入性(侵入性:父类代码直接更改,会不会影响之前的功能)、多继承兼容(所有的子类是不是都需要去拥有父类的这种方法?)):

或者干脆我直接定义一个Interface,父类继承该接口,然后子类重写,实例化调用...(参考类的Adapter)
这样也没问题,也可以解决我们当前面对的问题。
但是当类的体量上来后就会发现一个问题:那就是我们在调用不同类的同一方法的时候,需要实例化每个具体类,这时候我们就创建了好多好多的类的对象....
可不可以一次实例化,然后根据需求进行不同对象方法的调用?答案是有的!(参考对象的Adapter)
这个时候我们新建一个Adapter类,让其继承相关接口,然后基类对象作为参数传入方法。这个时候我们只需要实例化一次基类,在具体的Adapter类中的实现方法中进行具体子类方法的实现。
这样既保证了父类的干净,又能减少了子类的大批量实例化的情况。
Part1.类的Adapter

ChickenAdapter chickenAdapter = new ChickenAdapter(); chickenAdapter.ToTwteet(); EagleAdapter eagleAdapter = new EagleAdapter(); eagleAdapter.ToTwteet();
Part2.对象的Adapter

public class BridAdapter : ITwtweet
{
private Brid brid;
public BridAdapter(Brid _brid)
{
brid = _brid;
}
public void ToTwteet()
{
if (brid is Chicken)
{
Console.WriteLine("Chicken Twteet");
}
else if (brid is Eagle)
{
Console.WriteLine("Eagle Twteet");
}
}
}

浙公网安备 33010602011771号