Tuesday, December 1, 2015

Add Properties without change exisitng class- OOD Design



http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=138800&extra=page%3D1%26filter%3Dtypeid%26typeid%3D200%26typeid%3D200
Design a class which stores demographic information of a person like name, address, phone number, male/female. 
What if the person has any prefix to the name, multiple phone numbers/addresses, 
how will you handle dob in case of multiple locations
(If a person is both at 12 PM in USA on a date, then that date is different from date in India), 
how will you handle the validations of these fields when the user enters the values


目前的想法比较单纯 Code 大概是这样

class Patient {
        String name;
        String address;
        String phoneNumber;
        boolean gender;
        String dob; 
}

但是要加 prefix 或 multiple phonenumbers/addresses,就要去改变的类里面的变量。
应该能有更好的方法吧 ..

public interface Factory{
public Patient getPatient();
}
public interface Patient{
public String getName();
}
public class PatientBean implements Patient{
String name;
@Override
public String getName(){
return this.name;
}
}
public class BeanFactory implements Factory{
@Override
public Patient getPatient(){
return new PatientBean();
}
}
public class Test{
public static void main(String[] args){
Factory f = new BeanFactory();
Patient p = f.getPatient();
System.out.println(p.getName());
}
/*After couple of month, add a prefix before name*/
public class PatientBeanV2 extends PatientBean{
String prefix;
@Override
public String getName(){
return prefix+" " + name;

}
//modify class BeanFactory, getPatient() method, return new PatientBeanV2();

想请问这样子如果没有prefix 但有两只phoneNumber 就需要再新创一个类(PatientBeanV3) 吗?

如果这个需求是第三次提出的话那么我认为答案应该是yes。如果不可以直接修改原来的code的话

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts