vczh的日常 2018-04-02
今天调休了,闲来无事,再扯一个设计模式。我不是单纯的说设计模式,更多的是说编程思想上的东西。人心隔肚皮,人眼看到的不一定是真相,所以说女孩结婚后流的泪是当初眼拙脑残的结果。不过爱情中没有对错,爱情本来就是折磨死人不犯法。
说说继承与组合,继承偏重于对象本身具有;组合偏重于包括其他对象的东西(静的,动的)。设计层面的东西都是抽象的,所以要用抽象或接口来隔离实际功能。
不扯了,今天说桥接模式,这种结构型模式都是对象之间关系的模式。在数据库模型中,1对1的关系,只用把某个表的主键存在另一个表中,1对多的关系转成面向对象的时候就是多属于1,所以只用把1的主键放在多中。多对多的关系,可以转成两个1对多,就是需要建中间表。
直接上例子,我来解释例子吧。
//这个是抽象类,表示思想上的东西,只描述抽象的东西。
//比如我有个功能,我还知道某种东西可以实现这个功能。
abstract class HandsetBrand
{
//存了一个抽象引用
protected HandsetSoft soft;
//给引用赋值对象
//this就是一个占位实例
public void SetHandsetSoft(HandsetSoft soft)
{
this.soft = soft;
}
//定义一个约束(抽象方法我也称为约束)
public abstract void Run();
}
//这个对象拥有此功能
//这是一种继承与组合的混合使用
class HandsetBrandN : HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
//同样这个对象拥有这个功能。
class HandsetBrandM : HandsetBrand
{
public override void Run()
{
soft.Run();//其实我内部是通过其他对象实现我这个功能的。
}
}
//这种抽象的对象可以实现这个功能
abstract class HandsetSoft
{
public abstract void Run();
}
//具体的实现者
class HandsetGame : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机游戏");
}
}
//具体的实现者
class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机通讯录");
}
}
HandsetBrand ab;
ab = new HandsetBrandN();
//桥接就是连接了对象HandsetBrand与HandsetSoft
ab.SetHandsetSoft(new HandsetGame());
ab.Run();
ab.SetHandsetSoft(new HandsetAddressList());
ab.Run();
总结:这种结构型模式就是描述对象与对象之间关系的。人又称为社会人,假如人与人或人与其他对象没关系,那这个人活不长,没有研究价值。所以在内存中,我们运行的对象是有关系的对象。面向对象正是描述对象之间关系的,最常用的关系继承,组合,接口实现等