Redian新闻
>
anaconda是python的超级集合?
avatar
anaconda是python的超级集合?# Programming - 葵花宝典
H*M
1
刚开始看design pattern不久,看到本版的一个设计题目,拿出来讨论一下.不怕版砖,请
尽量批评.
原题如下:
Do you approve the following design?
Class Furniture{
Some functions related to the property of furnitures;
};
4 classes derived from Furniture
Class wood_chair
Class steel_chair
Class wood_table
Class steel_table
What if you need to design a lot of other furnitures like desks.... with oth
er materials like plastics.
版上有牛牛们讲用decorator,我觉得也是.
一种材料一种class我觉得不妥.可以abstract成材料这个概念.
以下是写的class,请说说看有什么不妥的地方.
class Furniture{
virtual v
avatar
c*0
2
每一个快递经过分拣到派送都是有重量的,包裹破损可以拒收,要查是不是快递员偷吃
是一件很简单的事情,如果查实是快递员偷吃了,那么他不值得同情,该罚款罚款,该
开除开除。如果是商家寄过来就是少一个,并不是因为破损或者偷吃,那么圆通不分青
红皂白的罚款开除那就是圆通的责任,(现在很多快递公司都靠罚网点的钱挣钱了!)
就事论事,派出所不应该出具这类证明,也没有权利提出意见,那是法院的事,事实是
包裹确实坏了,第二次确实是盗用了邮政快递,投诉是顾客的权利,较真的客户我们不
应该拿道德绑架。真正解决问题的是圆通及快递行业对于投诉采取的处理办法是否符合
劳动法。因为一次的投诉需要处理快递员巨额的罚款并面临开除是否体现了企业用工公
平性,现在的快递公司已经是以压榨配送站点及配送员罚款来支撑企业盈利了。问题的
根源在这里!就事论事,派出所不应该出具这类证明,也没有权利提出意见,那是法院
的事,事实是包裹确实坏了,第二次确实是盗用了邮政快递,投诉是顾客的权利,较真
的客户我们不应该拿道德绑架。真正解决问题的是圆通及快递行业对于投诉采取的处理
办法是否符合劳动法。因为一次的投诉需要处理快递员巨额的罚款并面临开除是否体现
了企业用工公平性,现在的快递公司已经是以压榨配送站点及配送员罚款来支撑企业盈
利了。问题的根源在这里!
avatar
p*t
3
【 以下文字转载自 FleaMarket 讨论区 】
发信人: paat (pat), 信区: FleaMarket
标 题: [出售]NewEgg $50 Customer Care Gift Card
发信站: BBS 未名空间站 (Mon Dec 6 23:24:06 2010, 美东)
二手交易风险自负!请自行验证是否合法和一手卡!:
y
我想卖的物品:
NewEgg $50 Customer Care Gift Card
单张面值:
$50
可接受价格(必须明码标价!):
$46
物品新旧要求:
new at hand
邮寄方式要求:
code only
买卖双方谁承担邮寄损失(Required if not code only):
n/a
付款方式说明:
paypal or BOA
其他补充说明:
A CUSTOMER CARE GIFT CARD EXPIRES NINETY (90) DAYS AFTER IT IS ISSUED.
(issued on Dec 1, 2010)
广告的有效期:
物品来源(Required for All Cards!):
Your customer care gift card may be used toward the purchase of any item on
Newegg.com. To redeem, simply enter the GIFT CARD ID and SECURITY CODE
listed above in the checkout screen when placing your order.
我的联系方式:
bbs mail
Warranty期限:
能否证明是合法的一手卡?(Required for All Cards!):
yes
state and zip:
n/a
avatar
s*k
4
是加了很多lib,尤其data处理的包的python超级集合?
avatar
g*i
5
这是一个典型的桥模式,
http://www.netobjectives.com/files/design-patterns-explained-ch10.pdf
The original design has the problems that if you want to add a Desk, then
you have to add too class: WoodDesk and SteelDesk.
If you can use bridge pattern
把 material 和 style作为家具的property,在创建家具的时候这样就可以自由的组合
不同的MATERIAL和STYLE. 这也是对自然世界最确切的建模。
装饰模式用在这里有点霸王硬上攻了。
avatar
p*t
6
上次black friday 电视没买到给的,

【在 p**t 的大作中提到】
: 【 以下文字转载自 FleaMarket 讨论区 】
: 发信人: paat (pat), 信区: FleaMarket
: 标 题: [出售]NewEgg $50 Customer Care Gift Card
: 发信站: BBS 未名空间站 (Mon Dec 6 23:24:06 2010, 美东)
: 二手交易风险自负!请自行验证是否合法和一手卡!:
: y
: 我想卖的物品:
: NewEgg $50 Customer Care Gift Card
: 单张面值:
: $50

avatar
W*o
7
不能叫超集,只不过是包罗很多包,还是基于python
avatar
g*y
8
bridge不是说把abstration跟imp分离吗?
一层一层的加property,是decorator的特点和作用啊?
我学的不好,可能是我没理解到这两个pattern的精髓,望讲解

【在 g***i 的大作中提到】
: 这是一个典型的桥模式,
: http://www.netobjectives.com/files/design-patterns-explained-ch10.pdf
: The original design has the problems that if you want to add a Desk, then
: you have to add too class: WoodDesk and SteelDesk.
: If you can use bridge pattern
: 把 material 和 style作为家具的property,在创建家具的时候这样就可以自由的组合
: 不同的MATERIAL和STYLE. 这也是对自然世界最确切的建模。
: 装饰模式用在这里有点霸王硬上攻了。

avatar
g*y
9
大哥,您累不累啊。能赚几块?

【在 p**t 的大作中提到】
: 【 以下文字转载自 FleaMarket 讨论区 】
: 发信人: paat (pat), 信区: FleaMarket
: 标 题: [出售]NewEgg $50 Customer Care Gift Card
: 发信站: BBS 未名空间站 (Mon Dec 6 23:24:06 2010, 美东)
: 二手交易风险自负!请自行验证是否合法和一手卡!:
: y
: 我想卖的物品:
: NewEgg $50 Customer Care Gift Card
: 单张面值:
: $50

avatar
n*7
10
试过一段时间
有些冷门包超级老
最后还是用pip装了
avatar
a*n
11
bridge 本质是处理,如果一个对象有正交的行为, 他们会独立演化的情况
对于这个题,我觉得bridge 是没错了, 不过也可以不用bridge, 直接用多接口
(也可以用C++ Template的traits 和 policy 方式)
interfaces:
material
/\
/ \
wood steel ......
furniture
/\
/ \
table chair ......
concrete furniture
wood chair: public wood, public chair...
steel chair: public steel, public chair...
我觉得多接口和bridge 最大的区别在于,bridge 可以在runtime 更换imp
另外使用组合耦合低一些
decor 是为class添加responsibility
avatar
p*t
12
你有病吧,我不在newegg买东西不行啊,

【在 g****y 的大作中提到】
: 大哥,您累不累啊。能赚几块?
avatar
m*n
13
应该是关于计算的集合,据说整合了numpy pandas 和 matplot
整合完了,比较像R
另外这三个包单独装好像各种不成功,真是奇葩了
avatar
g*i
14
多接口是design的大忌,这一点GoF讲的很清楚,现实生活中这么玩可能是高手,面试
的时候可千万别
这么回答。
而且多接口照样解决不了加一个STYLE (Desk),要创建很多个子类(WoodDesk,
SteelDesk)的
问题。

【在 a****n 的大作中提到】
: bridge 本质是处理,如果一个对象有正交的行为, 他们会独立演化的情况
: 对于这个题,我觉得bridge 是没错了, 不过也可以不用bridge, 直接用多接口
: (也可以用C++ Template的traits 和 policy 方式)
: interfaces:
: material
: /\
: / \
: wood steel ......
: furniture
: /\

avatar
d*n
15
那gift card哪来的?

【在 p**t 的大作中提到】
: 你有病吧,我不在newegg买东西不行啊,
avatar
H*M
16
不太懂啊 能不能把用bridge整个设计简单的写一下,就是class和重要func就可以了
另外,假如material和style作为家具的property,在创建家具的时候组合那么如果后来要
加另外一种属性,比如面向的市场客户群,那么这个家具的base class就要修改了啊

【在 g***i 的大作中提到】
: 这是一个典型的桥模式,
: http://www.netobjectives.com/files/design-patterns-explained-ch10.pdf
: The original design has the problems that if you want to add a Desk, then
: you have to add too class: WoodDesk and SteelDesk.
: If you can use bridge pattern
: 把 material 和 style作为家具的property,在创建家具的时候这样就可以自由的组合
: 不同的MATERIAL和STYLE. 这也是对自然世界最确切的建模。
: 装饰模式用在这里有点霸王硬上攻了。

avatar
p*t
17
上贴解释过了,最近不打算买电脑配件

【在 d****n 的大作中提到】
: 那gift card哪来的?
avatar
g*i
18
其实任何DESIGN PATTERN 都回归于GOF说的3句话
PROGRAMMING TO INTERFACE RATHER THAN CLASS
FAVOR OBJECT COMPOSITION OVER class INHERITANCE
ENCAPSULATE WHAT VARIES
对于有很多年设计经验的人来说,PATTERN不PATTERN都不是那么重要了,
这里变化的就是 STYLE和MATERIAL, 所以必然是要封装的,再加上(PROGRAMMING TO
INTERFACE RATHER THAN CLASS) 于是我们有了这两个interface。
再根据“FAVOR OBJECT COMPOSITION OVER INTERFERENCE” 排除做MULTIPLE
INHERITANCE, 于是我们就做一下composition,把STYLE和material作为家具的属性。
严格的来讲,这里的桥不是那么明显:)
为了让这样桥更明显就是单单把MATERIAL从家具中分离出来
家具有一个property MATERIAL (例如wood,steel,...), 和

【在 g*******y 的大作中提到】
: bridge不是说把abstration跟imp分离吗?
: 一层一层的加property,是decorator的特点和作用啊?
: 我学的不好,可能是我没理解到这两个pattern的精髓,望讲解

avatar
h*n
19
faint,lz不是说过了吗
电视没买到newegg赔偿的

【在 d****n 的大作中提到】
: 那gift card哪来的?
avatar
g*i
20
我现在觉得当时的那个考题,主要是为了让你把MATERIAL分出来就行了,STYLES实际上
就是家具,这
样的桥,更明显:)

来要

【在 H*M 的大作中提到】
: 不太懂啊 能不能把用bridge整个设计简单的写一下,就是class和重要func就可以了
: 另外,假如material和style作为家具的property,在创建家具的时候组合那么如果后来要
: 加另外一种属性,比如面向的市场客户群,那么这个家具的base class就要修改了啊

avatar
A*C
21
贵了点吧
真正的GC一般也才0.9
还要抢手的才行

【在 p**t 的大作中提到】
: 上贴解释过了,最近不打算买电脑配件
avatar
a*n
22
恩改一下,bridge的实现
material
/\
/ \
wood steel ......
myfurniture
/\
/ \
table chair ......
interface furniture{
void furniture_method();
string tostring();
}
interface material{
void material_method();
string tostring();
}
class steel : material()
{
public virtual void material_method(){...};
public virtual string tostring(){return "steel";}
}
abstract class myfurniture: material,

【在 g***i 的大作中提到】
: 多接口是design的大忌,这一点GoF讲的很清楚,现实生活中这么玩可能是高手,面试
: 的时候可千万别
: 这么回答。
: 而且多接口照样解决不了加一个STYLE (Desk),要创建很多个子类(WoodDesk,
: SteelDesk)的
: 问题。

avatar
g*i
23
好桥,
虽然俺不认你写的代码:) (btw: 你这是C++吗?)

【在 a****n 的大作中提到】
: 恩改一下,bridge的实现
: material
: /\
: / \
: wood steel ......
: myfurniture
: /\
: / \
: table chair ......
: interface furniture{

avatar
a*n
24
C#直接写的, 可能放到IDE里面一堆错误。。。
C++不直接支持interface,所以design的题我觉得用C#,JAVA比较好
仔细想了一下,多接口的class膨胀问题确实是硬伤,这个还是得用Bridge
不过用C++ template的traits 和 policy 也可以实现, 但是面试应该不会问这个

【在 g***i 的大作中提到】
: 好桥,
: 虽然俺不认你写的代码:) (btw: 你这是C++吗?)

avatar
H*M
25
在本版设计牛人们的指教下,算是领会点bridge了
我把asuran的版本改成c++版的,也加深下印象。
ps, 发现design pattern真难啊,有时候是i understand every word, but i dont un
derstand when they are combined 成一句话。呵呵
改了。编译过的。
#include
#include
using namespace std;
class material;
class furniture
{
public:
furniture(material* mat):m(mat){}
virtual void tostring() = 0;
void setMaterial(material* m){this->m = m;}
material* getMaterial(){return m;}
private:
material* m;
};
class material{
public:
avatar
v*t
26
基于你的改了一些错误,这里是编译通过的:
class material;
class furniture{
public:
virtual void tostring() = 0;
void setMaterial(material* m){this->m = m;}
protected:
material* m;
};
class material{
protected:
string materialName;
public:
virtual string what() = 0;
};
class steel: public material
{
public:
steel(){materialName = "steel";}
virtual string what(){return "steel";}
};
class wood:public material
{
public:
wood(){this->materialName = "wood";}
virtual string what(
avatar
v*t
27
然后在贴一个decorator的做一个比较:
class Fur{
public:
virtual void describeself()=0;
};
class Table:public Fur{
public:
void describeself(){cout<};
class Material:public Fur{
public:
virtual void describeself()=0;
protected:
Fur *fur;
string material_name;
};
class Wood: public Material{
public:
Wood(Fur *f){fur = f; material_name = "wood";}
void describeself(){
fur->describeself();
cout<}
};
class Steel: publi
avatar
v*t
28
我觉得decorator的自由度(flexibility)比bridge还更大一些,
用那个pattern我觉得在于你怎么去看这个问题:
decorator:material的性质可以是几种材料的任意组合叠加(appendable property)
bridge:material这个属性具有正交性,不能任意组合叠加(exclusive property)

【在 v*****t 的大作中提到】
: 然后在贴一个decorator的做一个比较:
: class Fur{
: public:
: virtual void describeself()=0;
: };
: class Table:public Fur{
: public:
: void describeself(){cout<: };
: class Material:public Fur{

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。